import Vue from "vue"
import Vuex from "vuex"
import createPersistedState from "vuex-persistedstate";

Vue.use(Vuex)

// 创建仓库对象
const store = new Vuex.Store({
    state: {
        // [{商品id,选中状态,数量，价格},{}]
        carData: [],
        token: "",
        userInfo: {},
    },
    mutations: {
        // 设置token
        setToken(state, token) {
            state.token = token
        },
        // 设置用户信息
        setUserInfo(state, userInfo) {
            state.userInfo = userInfo
        },
        clearUserInfo(state) {
            state.token = ''
            state.userInfo = ''
        },
        // 添加商品到购物车
        addGoodsToCar(state, good) {
            // 加入购物车之前，判断是否同id商品
            const index = state.carData.findIndex(item => item.id == good.id)
            if (index !== -1) {
                // 有：则累加数量
                state.carData[index].number += good.number
            } else {
                // 没有：则直接加入push
                state.carData.push(good)
            }
        },
        // 更新商品的选中状态
        updCarGoodsSelected(state, obj) {
            // id => 商品index
            const index = state.carData.findIndex(item => item.id == obj.id)
            // index改商品状态
            state.carData[index].selected = obj.selected
        },
        // 更新商品的数量
        updCarGoodsNumber(state, obj) {
            // id => 商品index
            const index = state.carData.findIndex(item => item.id == obj.id)
            // index改商品数量
            state.carData[index].number = obj.number
        },
        // 删除购物车商品
        delCarGoods(state, id) {
            const index = state.carData.findIndex(item => item.id == id)
            state.carData.splice(index, 1)
        }
    },
    getters: {
        // 构造一个对象： {id:选中状态}
        getGoodsSelected(state) {
            const obj = {};
            state.carData.forEach(item => {
                obj[item.id] = item.selected
            })
            return obj
        },
        // 构造一个对象： {id:数量}
        getGoodsNumber(state) {
            const obj = {};
            state.carData.forEach(item => {
                obj[item.id] = item.number
            })
            return obj
        },
        // 总数量
        getCarTotal(state) {
            let total = 0;
            state.carData.forEach(item => {
                total += parseInt(item.number)
            });
            return total;
        },
        // 选中的总数量
        getCarSelectedTotal(state) {
            let total = 0;
            state.carData.forEach(item => {
                if (item.selected) {
                    total += parseInt(item.number)
                }
            });
            return total;
        },
        // 选中的总价格
        getCarTotalPrice(state) {
            let total_price = 0;
            state.carData.forEach(item => {
                if (item.selected) {
                    total_price += (parseFloat(item.price) * parseInt(item.number))
                }
            });
            return total_price * 100;
        },
    },
    plugins: [createPersistedState()]
})
// 导出
export default store;